iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 22
1

最新內容更新於 使用 Travis CI / Azure PipeLines 發佈 Artifact 到 Dropbox

吉米: 既然,可以運用 CI Server 自動建置、自動測試、發訊息,那再接下來,應該就是自動發佈了吧。

Eric: 沒錯,不過發佈類型不同,設定也有所差異。

吉米: 可以先介紹一下安裝檔的發佈嗎?

Eric: 好啊。


由於先前使用的 CI Server 全部是現有的雲端服務,或是自行架構在 Azure 的虛擬機器。

所以期望 CI Server 也可以將檔案,自動發佈到網路空間,以下,筆者試著將軟體發佈到 DropBox 之中。

1. Dropbox 設定

檔案上傳到 Dropbox 時,筆者運用 andreafabrizi 在 GitHub ,所分享的 Dropbox-Uploader ,以簡化介接 Dropbox API 的工作量。

首先,先到 Dorpbox Developers ,會看到以下的畫面,

Dropbox_developer_Myapp

按下 Create app 後,創立一個提供 CI Server 使用的 API。

Dropbox_Myapp_create

完成建立後,直接到 OAuth 2 的區域取得 Token 值,這會用在 Dropbox_Uploader.sh 之中。

Dropbox__MyApp_config

要注意的是,dropbox_uploader.sh 中,是將 先前取得的 Dropbox OAuth2 的 Token 另存檔案。但這情況不適合用在 CI Server ,所以對 dropbox_uploader.sh 進行部份修改。

# step 1
# 到 #Default values 增加 Token
OAUTH_ACCESS_TOKEN=73x2khI0WgMAAAAAAACQT9o8kMlODtz48GhinV9sq2lRCZq8RzIpLMBkVb2575wy

# Step 2
# 將 SETUP 區域的部份 mark 掉

並將修改後的 dropbox_upload.sh 放到 Repository 的目錄下。

2. Travis CI

Travis CI 提供許多現成的發佈方式,例如 GitHub Release, AWS S3, Azure Web App, NPM, …… ,但由於我們要將程式發佈到 DropBox 之中,所以使用 Custom Deploy

deploy:
  provider: script
  script: bash scripts/deploy.sh
  on:
    branch: master

在 yaml 指令中,看到 bash scipts/deploy.sh 這個指令。它的意思是,要去執行 scripts 這個資料夾中,deploy.sh 這個 shell 檔案。

依 Travis CI 建議的做法,是比軟好的方式,但筆者則是採用另一程做法。直接在 .travis.ymlscript 區段,執行上傳的動作。

language: csharp
solution: IronmanDemo.sln

mono: none
dotnet: 2.1.300

script:
    - dotnet restore
    - dotnet build --configuration Release
    - dotnet test Calculate.Tests/Calculate.Tests.csproj
    # 上傳到 dropbox 的檔案清單
    - bash dropbox_uploader.sh upload IronmanDemo/bin/Release 2019Ironman/Travis

Dropbx_List_travis

3. Azure DevOps deploy

在 Azure Pipeline 的部份,筆者參考官方文件的說明。

- task: ShellScript@2
  inputs:
    scriptPath:
    #args: '' # Optional
    #disableAutoCwd: false # Optional
    #cwd: '' # Optional
    #failOnStandardError: false

先將 dropbox-uploader.sh 放到 repository 之中。

再到 azure-pipeline.yml 中,加入 dropbox-uploader.sh 的調用。

- task: ShellScript@2
  inputs:
    scriptPath: .\dropbox_uploader.sh 
    args: upload IronmanDemo/bin 2019Ironman/AzureDevOps

Dropbx_List_AzureDevOps

說個題外話,筆者在實作時,沒有注意到參數要用 args 這個 key 值載入。試了很多次,才發發現這個錯誤,哈哈哈。


吉米: 透過 shell script 的操作,CI Server 的運用,就更加靈活。

Eric: 是啊,也要謝謝 andreafabrizi 分享上傳 dropbox 的 shell,大量簡化了與 Dropbox API 串接的工程。

吉米: 真的。剛剛看了一下 dropbox 的說明文件,如果都自己來,那工可就多了。

<< 待續 >>


延伸閲讀

  1. Xmodulo, How to access Dropbox from the command line in Linux
  2. Dropbox Uploader
  3. Using Travis CI to Deploy to Azure
  4. MR. 沙先生, Dropbox API 用 bash 也可以上傳下載 Dropbox

上一篇
21. 自動化測試 - 實作篇
下一篇
23. 持續發佈 - Web
系列文
從零開始建立自動化發佈的流水線30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言